home *** CD-ROM | disk | FTP | other *** search
- '***************************************************************************
- '* ROULET.BAS *
- '* Roulette Computerspiel *
- '* Stand: 16.11.94 *
- '***************************************************************************
-
- 'Variable: Zahl% ausgespielte Roulettezahl ( 0....36 )
- ' Farbe$() Array für die Farbangabe je Ziffer
- ' bank# Kontostand der Bank
- ' sp1# Kontostand von Spieler 1
- ' sp2# Kontostand von Spieler 2
- ' cureins# Summe der Einsätze auf dem Roulettetisch
- ' spieler1$ Name des ersten Spielers
- ' spieler2$ Name des zweiten Spielers
- ' num$ Hilfsstring für Zahleneingabe
- ' x1% x-Koord. linke, obere Ecke des Setzfeldes bei Null
- ' y1% y-Koord. wie oben
- ' dx1% Spaltenabstand des Setzfeldes
- ' dy1% Zeilenabstand des Setzfeldes
- ' xb% x-Koord. für Bilanzfeld
- ' yb% y-Koord. für Bilanzfeld
- ' xch% x-Koord. des 5 DM Chips
- ' ych% y-Koord. des 5 DM Chips
- ' dxch% x-Abstand der Chips
- ' dych% y-Abstand der Chips
- ' rch% Radius der Chips
- ' xf% x-Koord. der ersten Funktionstaste
- ' yf% y-Koord. der ersten Funktionstaste
- ' dxf% Abstand der Funktionstasten in x
- ' lxf% Funktionstastenlänge
- ' lyf% Funktionstastenbreite
- '
-
- TYPE Feld
- x AS INTEGER
- y AS INTEGER
- dx AS INTEGER
- dy AS INTEGER
- m AS INTEGER
- n AS INTEGER
- END TYPE
- '
- ' | m * dx |
- ' | dx | |
- ' x,y +----------+----------+........+----------+---------
- ' | | | | |
- ' | Feld1 | Feld2 | | Feld(m) | dy
- ' | | | | |
- ' +----------+----------+........+----------+-----
- ' | | | | |
- ' | Feld(m+1)| Feld(m+2)| | Feld(2*m)|
- ' : : : : : n * dy
- ' : : : : :
- ' +----------+----------+........+----------+
- ' | | | | |
- ' |Feld(n-1) |Feld(n-1) | |Feld(m*n) |
- ' | *m +1 | *m +2 | | |
- ' +----------+----------+........+----------+----------
- '
-
- TYPE einsatz
- akt AS INTEGER 'Gültigkeitsflag, 0 = ungültig
- geld AS DOUBLE 'Höhe des Einsatzes
- w AS INTEGER 'gewähltes Feld oder gewählte Ziffer
- END TYPE
-
- '
- 'Subprogramms
-
- DECLARE SUB AusWert (Zahl%)
- DECLARE SUB EinsEintr (spnr%, i%, einsatz#, wahl%)
- DECLARE SUB FehlMeld (FehlNr%)
- DECLARE SUB Mouse (m1%, m2%, m3%, m4%) 'MOUSE.ASM aus MIXED.QLB
- DECLARE SUB MouseAction (xm1%, ym1%)
- DECLARE SUB MousePut (xMouse%, yMouse%)
- DECLARE SUB MouseHide ()
- DECLARE SUB MouseInches (horizontal%, vertical%)
- DECLARE SUB MouseInstall (mflag%)
- DECLARE SUB MousePressLeft (leftcount%, xMouse%, yMouse%)
- DECLARE SUB MouseReleaseLeft (leftcount%, xMouse%, yMouse%)
- DECLARE SUB MouseNow (leftButton%, rightButton%, xMouse%, yMouse%)
- DECLARE SUB MouseShow ()
- DECLARE SUB Setzen (spieler$, spnr%)
- DECLARE SUB Spielfeld ()
-
-
- 'Functions
-
- DECLARE FUNCTION FEinsatz# (xk%, yk%)
- DECLARE FUNCTION FGameNew% ()
- DECLARE FUNCTION FTaste% (xk%, yk%)
- DECLARE FUNCTION FWahl$ (wahl%)
- DECLARE FUNCTION Infeld% (xk%, yk%, afeld AS Feld)
- DECLARE FUNCTION FGetWahl% (xk%, yk%)
-
-
- DIM SHARED chfeld AS Feld 'Chipfeld
- DIM SHARED ffeld AS Feld 'Funktionstastenfeld
- DIM SHARED sfeld AS Feld 'Spielendetastenfeld
- DIM SHARED zfeld AS Feld 'Rouletteziffernfeld
- DIM SHARED rsfeld AS Feld 'allgemeine Roulettefelder z.B. rot /schwarz
- DIM SHARED dfeld AS Feld 'Dutzend- und Spaltenfeldzeile
-
- DIM SHARED x1%, y1%, dx1%, dy1%, xch%, ych%, dxch%, dych%, rch%
- DIM SHARED xf%, yf%, dxf%, lxf%, lyf%, xm1%, ym1%, sp1#, sp2#, cureins#
- DIM SHARED spieler2$
-
- DIM SHARED chipfeld%(9000) 'Zwischenspeicher für Fenster
-
- 'Array für Spieleinsätze mit Elementen vom Typ einsatz
- '1. Dimension für Spieler1 und Spieler2
- '2. Dimension für bis zu 3 Einsätze je Spieler
-
- DIM SHARED speins(1 TO 2, 1 TO 3) AS einsatz
-
- 'Array für Gewinn je Spieler
- DIM SHARED spgew(1 TO 2) AS DOUBLE
-
- '
- DIM SHARED Farbe$(36) 'Farbangabe für 0 - 36
-
- ' n = Null (keine Farbe) r = rot s = schwarz
- '0 - 9
- DATA n, r, s, r, s, r, s, r, s, r
-
- '10 - 19
- DATA s, s, r, s, r, s, r, s, r, r
-
- '20 - 29
- DATA s, r, s, r, s, r, s, r, s, s
-
- '30 - 36
- DATA r, s, r, s, r, s, r
-
- FOR i% = 0 TO 36 'Werte in Array einlesen
- READ Farbe$(i%)
- NEXT i%
-
- '*********************** Programmbeginn *************************
-
- SCREEN 12
- PALETTE 0, 7680 'Hintergrund grün
- COLOR 15
- CLS
- PRINT
- PRINT
- PRINT " Willkommen zu Roulette! "
- PRINT " Dieses Spiel befindet sich in Entwicklung, "
- PRINT " deshalb übernimmt der Autor keine Haftung "
- PRINT " für etwaig auftretende Probleme!"
- PRINT
- PRINT
- INPUT " Name des ersten Spielers: ", spieler1$
- IF spieler1$ = "" THEN
- spieler1$ = "Max"
- spieler2$ = "Moritz"
- bank# = 10000
- sp1# = 5000
- sp2# = 5000
- ELSE
- INPUT " Name des zweiten Spielers: ", spieler2$
- INPUT " Kontostand der Bank: ", num$
- bank# = VAL(num$)
- INPUT " Kontostand von Spieler 1: ", num$
- sp1# = VAL(num$)
- IF spieler2$ <> "" THEN
- INPUT " Kontostand von Spieler 2: ", num$
- sp2# = VAL(num$)
- END IF
- END IF
-
- '********************* Zufallsgenerator initialisieren ***************
-
- RANDOMIZE TIMER
-
- '*********************** Spielfeld erstellen *************************
-
- CALL Spielfeld
- 'Chipbereich abspeichern
- GET (0, 290)-(230, 444), chipfeld%(0)
-
- '*********************** Mouse-Installation **************************
-
- MouseInstall mflag%
- IF mflag% = 0 THEN
- PRINT "Keine Maus installiert!"
- SYSTEM
- END IF
-
- '******************** Spielstand anzeigen ****************************
-
- GOSUB Kontoanzeige
-
- '******************* Hier beginnt jede neue Ausspielung *******************
-
- DO
- MouseHide
- PUT (0, 290), chipfeld%(0), PSET
- MouseShow
- COLOR 14
- LOCATE 12, 1
- FOR i% = 1 TO 21
- PRINT SPACE$(30)
- NEXT i%
- LOCATE 12, 1
-
- '*********************** Eingabe der Spieleinsätze *************************
-
- 'Spieleinsätze auf nicht aktuell setzen
- speins(1, 1).akt = 0
- speins(1, 2).akt = 0
- speins(1, 3).akt = 0
- speins(2, 1).akt = 0
- speins(2, 2).akt = 0
- speins(2, 3).akt = 0
- cureins# = 0
-
- 'neuen Einsatz abfragen für spieler1
- spnr% = 1
- Setzen spieler1$, spnr%
- 'Ausgabe des neuen Kontostands für Spieler1
- GOSUB Kontoanzeige
-
- IF spieler2$ <> "" THEN
- spnr% = 2
- 'neuen Einsatz abfragen für spieler2
- Setzen spieler2$, spnr%
- 'Ausgabe des neuen Kontostands für Spieler2
- GOSUB Kontoanzeige
- END IF
-
- '************************** Ausspielung ************************************
-
- MouseHide
- PUT (0, 290), chipfeld%(0), XOR
- MouseShow
-
- SLEEP 3
-
- Zahl% = INT(37 * RND)
- COLOR 15
- LOCATE 40, 1
- IF Farbe$(Zahl%) = "r" THEN
- PRINT "Ausspielung: "; Zahl%; " ";
- COLOR 12
- PRINT "rot"
- COLOR 15
- ELSEIF Farbe$(Zahl%) = "s" THEN
- PRINT "Ausspielung: "; Zahl%; " ";
- COLOR 8
- PRINT "schwarz"
- COLOR 15
- ELSE
- PRINT "Ausspielung: "; Zahl%
- END IF
-
- '********************** Auswertung des Spieles ****************************
-
- AusWert Zahl%
- PRINT
- PRINT
- PRINT "Die Bank zahlt an"
- PRINT
- PRINT spieler1$, "DM";
- PRINT USING "#####.##"; spgew(1)
- PRINT
- IF spieler2$ <> "" THEN
- PRINT spieler2$, "DM";
- PRINT USING "#####.##"; spgew(2)
- END IF
- 'Bankergebnis ermitteln
- PRINT
- PRINT
- cureins# = cureins# - spgew(1) - spgew(2)
- IF cureins# < 0 THEN
- PRINT "Die Bank verliert DM";
- ELSE
- PRINT "Die Bank gewinnt DM";
- END IF
- PRINT USING "######.##"; ABS(cureins#)
-
- 'Neue Kontostände ermitteln
-
- bank# = bank# + cureins#
- IF bank# < 0 THEN
- PRINT
- PRINT "Die Bank ist Pleite !!!"
- FOR n% = 1 TO 3
- BEEP
- NEXT n%
- END IF
-
- sp1# = sp1# + spgew(1)
- sp2# = sp2# + spgew(2)
-
- GOSUB Kontoanzeige
-
- '********************** Spielende / Neues Spiel ***************************
-
- LOOP UNTIL FGameNew% = 1
-
- END
-
- '********************** Subroutine: Kontoanzeige **************************
-
- Kontoanzeige:
- xb% = 1
- yb% = 4
- COLOR 15
- LINE (xb%, yb%)-(xb% + 200, yb% + 60), 13, B
-
- 'Retten der Einstellungen für Textausgabe
- curlin% = CSRLIN: curspa% = POS(0)
-
- LOCATE 1, 8
- PRINT "Spielstand"
- LOCATE 3, 3
- PRINT "Bank",
- PRINT USING "#######.##"; bank#
- LOCATE 5, 3
- PRINT spieler1$,
- PRINT USING "#######.##"; sp1#
- IF spieler2$ <> "" THEN
- LOCATE 7, 3
- PRINT spieler2$,
- PRINT USING "#######.##"; sp2#
- END IF
-
- 'Wiederherstellen der Einstellungen für Textausgabe
- LOCATE curlin%, curspa%
- RETURN
-
- '***************************************************************************
- '* AusWert *
- '* Subprogramm zur Auswertung des Spielergebnisses *
- '* Stand: 16.11.94 *
- '***************************************************************************
- '
- 'Wertet das Spielergebnis aus und ermittelt die etwaigen Gewinne bei
- 'einfachen Einsätzen wie, z.B rot, passe, pair, dutzend, spalte etc.
- '
- 'Aufruf durch: ROULET.BAS
- '
- 'Ruft auf: -
- '
- '
- 'Übergabeparameter: Zahl% ausgespielte Roulettezahl
- '
- SUB AusWert (Zahl%)
-
- 'Löschen der aus der ausgespielten Zahl des vorherigen Spiels ermittelten
- 'einfachen Gewinnfelder
-
- gfarbe% = 0
- gcase% = 0
- ghoch% = 0
- gdutz% = 0
- gspalt% = 0
-
- '********************* Allgemeine Setzfelder ***************************
- 'Farbe ermittlen für alle Zahlen außer null
-
- IF Zahl% THEN 'Nicht erfüllt bei null
- IF Farbe$(Zahl%) = "r" THEN
- gfarbe% = 713 'rot
- ELSE
- gfarbe% = 703 'schwarz
- END IF
-
- 'Gerade oder ungerade Zahl ermitteln außer für null
-
- IF Zahl% MOD 2 THEN
- gcase% = 712 'ungerade
- ELSE
- gcase% = 702 'gerade
- END IF
-
- 'Hohe oder niedrige Zahl ermitteln außer für null
-
- IF Zahl% > 18 THEN
- ghoch% = 701 '19 - 36
- ELSE
- ghoch% = 711 ' 1 - 18
- END IF
-
- 'Dutzend ermitteln außer für null
-
- IF Zahl% < 13 THEN
- gdutz% = 601 ' 1 - 12
- ELSEIF Zahl% > 24 THEN
- gdutz% = 603 '25 - 36
- ELSE
- gdutz% = 602 '13 - 24
- END IF
-
- 'Spalte ermitteln außer für null
-
- SELECT CASE Zahl%
- CASE 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34
- gspalt% = 611 '1. Spalte
- CASE 2, 5, 8, 11, 14, 17, 20, 23, 26, 29, 32, 35
- gspalt% = 612 '2. Spalte
- CASE ELSE
- gspalt% = 613 '3. Spalte
- END SELECT
- END IF
-
- '************************ Zahlen ****************************************
- 'Initialisierung
-
- CONST na% = -1
- gz1% = na%
- gz21% = na%
- gz22% = na%
- gz23% = na%
- gz24% = na%
- gz31% = na%
- gz32% = na%
- gz33% = na%
- gz34% = na%
- gz41% = na%
- gz42% = na%
- gz43% = na%
- gz44% = na%
- gz61% = na%
- gz62% = na%
- gz63% = na%
- gz64% = na%
-
- SELECT CASE Zahl%
- CASE 0
- gz1% = 0
- gz21% = 2
- gz22% = 4
- gz23% = 6
- gz31% = 3
- gz32% = 5
- gz41% = 1
- gz42% = 7
- CASE 1
- gz1% = 9
- gz21% = 10
- gz22% = 16
- gz23% = 2
- gz31% = 8
- gz32% = 14
- gz33% = 3
- gz41% = 17
- gz61% = 15
- gz62% = 21
- CASE 2
- gz1% = 11
- gz21% = 4
- gz22% = 10
- gz23% = 12
- gz24% = 18
- gz31% = 8
- gz32% = 14
- gz33% = 3
- gz34% = 5
- gz41% = 17
- gz42% = 19
- gz61% = 15
- gz62% = 21
- CASE 3
- gz1% = 13
- gz21% = 6
- gz22% = 20
- gz23% = 12
- gz31% = 8
- gz32% = 14
- gz33% = 5
- gz41% = 19
- gz61% = 15
- gz62% = 21
- CASE 4, 7, 10, 13, 16, 19, 22, 25, 28, 31
- n% = (Zahl% - 4) \ 3
- gz1% = 23 + n% * 14
- gz21% = 16 + n% * 14
- gz22% = 24 + n% * 14
- gz23% = 30 + n% * 14
- gz31% = 22 + n% * 14
- gz32% = 28 + n% * 14
- gz41% = 17 + n% * 14
- gz42% = 31 + n% * 14
- gz61% = 15 + n% * 14
- gz62% = 21 + n% * 14
- gz63% = 29 + n% * 14
- gz64% = 35 + n% * 14
- CASE 5, 8, 11, 14, 17, 20, 23, 26, 29, 32
- n% = (Zahl% - 5) \ 3
- gz1% = 25 + n% * 14
- gz21% = 18 + n% * 14
- gz22% = 24 + n% * 14
- gz23% = 26 + n% * 14
- gz24% = 32 + n% * 14
- gz31% = 22 + n% * 14
- gz32% = 28 + n% * 14
- gz41% = 17 + n% * 14
- gz42% = 19 + n% * 14
- gz43% = 31 + n% * 14
- gz44% = 33 + n% * 14
- gz61% = 15 + n% * 14
- gz62% = 21 + n% * 14
- gz63% = 29 + n% * 14
- gz64% = 35 + n% * 14
- CASE 6, 9, 12, 15, 18, 21, 24, 27, 30, 33
- n% = (Zahl% - 6) \ 3
- gz1% = 27 + n% * 14
- gz21% = 20 + n% * 14
- gz22% = 26 + n% * 14
- gz23% = 34 + n% * 14
- gz31% = 22 + n% * 14
- gz32% = 28 + n% * 14
- gz41% = 19 + n% * 14
- gz42% = 33 + n% * 14
- gz61% = 15 + n% * 14
- gz62% = 21 + n% * 14
- gz63% = 29 + n% * 14
- gz64% = 35 + n% * 14
- CASE 34
- gz1% = 163
- gz21% = 156
- gz22% = 164
- gz31% = 162
- gz32% = 168
- gz41% = 157
- gz61% = 155
- gz62% = 161
- CASE 35
- gz1% = 165
- gz21% = 164
- gz22% = 158
- gz23% = 166
- gz31% = 162
- gz32% = 168
- gz41% = 157
- gz42% = 159
- gz61% = 155
- gz62% = 161
- CASE 36
- gz1% = 167
- gz21% = 166
- gz22% = 160
- gz31% = 162
- gz32% = 168
- gz41% = 159
- gz61% = 155
- gz62% = 161
- CASE ELSE
- FehlMeld 4 'Zahl% < 0 oder Zahl% > 36
- END SELECT
-
-
- '**************** Ermittlung der Spielergebnisse *************************
-
- FOR s% = 1 TO 2 'Für Spieler1 und Spieler2
- spgew(s%) = 0 'löschen des alten Gewinnes
-
- FOR i% = 1 TO 3 'Für Einsatz1 bis Einsatz3
- IF speins(s%, i%).akt THEN 'für gültigen Spieleinsatz
-
- SELECT CASE speins(s%, i%).w
- CASE gfarbe%, gcase%, ghoch%
- gewfac# = 2
- CASE gdutz%, gspalt%
- gewfac# = 3
- CASE gz61%, gz62%, gz63%, gz64%
- gewfac# = 6
- CASE gz41%, gz42%, gz43%, gz44%
- gewfac# = 9
- CASE gz31%, gz32%, gz33%, gz34%
- gewfac# = 12
- CASE gz21%, gz22%, gz23%, gz24%
- gewfac# = 18
- CASE gz1%
- gewfac# = 36
- CASE ELSE
- gewfac# = 0
- END SELECT
-
- 'Sonderbehandlung bei Roulettezahl = 0
- IF Zahl% = 0 THEN
- IF speins(s%, i%).akt THEN 'für gültigen Spieleinsatz
- IF speins(s%, i%).w > 700 AND speins(s%, i%).w < 714 THEN
- gewfac# = .5
- END IF
- END IF
- END IF
- spgew(s%) = spgew(s%) + speins(s%, i%).geld * gewfac#
- END IF
- NEXT i%
- IF spieler2$ = "" THEN EXIT FOR 'Exit, wenn nur 1 Spieler
- NEXT s%
-
- END SUB
-
- '***************************************************************************
- '* EinsEintr *
- '* Subprogramm zum Eintragen des Einsatzes ins Typenfeld *
- '* Stand: 06.11.94 *
- '***************************************************************************
- '
- 'Trägt den Einsatz und die gewählte Ziffer etc. für den jeweiligen Spieler
- 'in das Typfeld Einsatz ein
- '
- 'Aufruf durch: Setzen
- '
- 'Ruft auf: -
- '
- 'Parameters: s% Spielernummer
- ' i% Wievielter Einsatz ( 1....3 )
- ' einsatz# Betrag des eingesetzten Geldes
- ' wahl% Feldnummer des gesetzten Feldes
- '
- SUB EinsEintr (s%, i%, einsatz#, wahl%)
-
- IF s% = 1 OR s% = 2 THEN
- IF i% >= 1 AND i% <= 3 THEN
- speins(s%, i%).akt = 1
- speins(s%, i%).geld = einsatz#
- speins(s%, i%).w = wahl%
- END IF
- END IF
-
- END SUB
-
- '***************************************************************************
- '* FehlMeld *
- '* Subprogramm zur Ausgabe einer Fehlernachricht *
- '* Stand: 18.09.94 *
- '***************************************************************************
- '
- 'Ausgabe einer Fehlermeldung in einer Box am Bildschirm
- '
- 'Aufruf durch: Setzen, AusWert
- '
- 'Ruft auf: MouseHide, MouseShow
- '
- 'Parameters: FehlNr% Fehlernummer
- '
- SUB FehlMeld (FehlNr%)
-
- 'Löschen des Chipfelds für Fehlerbox
- MouseHide
- PUT (0, 290), chipfeld%(0), XOR
- xb% = 1
- yb% = 300
- LINE (xb%, yb%)-(xb% + 228, yb% + 76), 12, B
- LINE (xb% + 2, yb% + 2)-(xb% + 226, yb% + 74), 12, B
- COLOR 15
- bzeile% = 40: bspalte% = 3
- LOCATE bzeile%, bspalte%
- SELECT CASE FehlNr%
- CASE 1
- PRINT "Falscheingabe bei Chipwahl"
- PRINT
- CASE 2
- PRINT "Falscheingabe bei Feldwahl"
- PRINT
- CASE 3
- PRINT "Kontoüberziehung !!!"
- PRINT
- CASE 4
- PRINT "Auswertung mit Zahl%"
- PRINT "außerhalb des Bereichs"
- CASE ELSE
- PRINT "Aufruf von FehlMeld mit"
- LOCATE , bspalte%
- PRINT " unbekannter Fehlernummer!"
- END SELECT
- PRINT
- LOCATE , bspalte% + 4
- PRINT "Bestätigung "
- LOCATE , bspalte%
- PRINT "mit beliebiger Taste"
- MouseShow
-
- 'Warten auf Bestätigung durch Tastendruck
- DO
- ky$ = INKEY$
- LOOP UNTIL LEN(ky$)
-
- 'Chipfeld wiederherstellen
- MouseHide
- PUT (0, 290), chipfeld%(0), PSET
- MouseShow
- COLOR 14
- END SUB
-
- '***************************************************************************
- '* FEinsatz# *
- '* Function zur Ermittlung des Spieleinsatzes *
- '* Stand: 09.07.94 *
- '***************************************************************************
- '
- 'Ergebnis des Funktionsaufrufs: Höhe des Geldeinsatzes
- ' oder Null im Falle eines Falschaufrufes
- '
- 'Aufruf durch: Setzen
- '
- 'Ruft auf: Infeld
- '
- 'Parameters: xm1%, ym1% Mauskoordinaten
- '
- FUNCTION FEinsatz# (xm1%, ym1%)
-
- 'Test ob ausserhalb des Bereiches der Chipfelder
-
- m% = 4
- n% = 2
-
- IF xm1% < xch% - rch% OR xm1% > xch% - rch% + m% * dxch% THEN
- FEinsatz# = 0
- EXIT FUNCTION
- ELSE
- IF ym1% < ych% - rch% OR ym1% > ych% - rch% + n% * dych% THEN
- FEinsatz# = 0
- EXIT FUNCTION
- END IF
- END IF
-
- 'Übergabeparameter vorbereiten
-
- chfeld.x = xch% - rch%
- chfeld.y = ych% - rch%
- chfeld.dx = dxch%
- chfeld.dy = dych%
- chfeld.m = 4
- chfeld.n = 2
-
- FeldNr% = Infeld%(xm1%, ym1%, chfeld)
-
- SELECT CASE FeldNr%
- CASE 1
- FEinsatz# = 5
- CASE 2
- FEinsatz# = 10
- CASE 3
- FEinsatz# = 20
- CASE 4
- FEinsatz# = 50
- CASE 5
- FEinsatz# = 100
- CASE 6
- FEinsatz# = 200
- CASE 7
- FEinsatz# = 500
- CASE 8
- FEinsatz# = 1000
- CASE ELSE
- PRINT "Fehler bei Auswahl der Chips!"
- FEinsatz# = 0
- END SELECT
-
- END FUNCTION
-
- '***************************************************************************
- '* FGameNew% *
- '* Function zur Ermittlung ob neues Spiel oder Ende *
- '* Stand: 19.10.94 *
- '***************************************************************************
- '
- 'Ergebnis des Funktionsaufrufs: 1 = Spielende
- ' 2 = Neues Spiel
- '
- 'Aufruf durch: ROULET.BAS
- '
- 'Ruft auf: Infeld, MouseHide, MouseShow
- '
- '
- 'Variables: xs% x-Koord. der ersten Spielendetaste
- ' ys% y-Koord. der ersten Spielendetaste
- ' dxs% Abstand der Funktionstasten in x
- ' lxs% Funktionstastenlänge
- ' lys% Funktionstastenbreite
- '
- '
- FUNCTION FGameNew%
-
- '******************** Tasten zeichnen ************************************
-
- xs% = 6
- ys% = 412
- dxs% = 120
- lxs% = 100
- lys% = 30
- PALETTE 7, 2555959
- MouseHide
- FOR i% = 0 TO 1
- LINE (xs% + i% * dxs%, ys%)-(xs% + lxs% + i% * dxs%, ys% + lys%), 15, B
- PAINT (xs% + lxs% / 2 + i% * dxs%, ys% + lys% / 2), 7, 15
- NEXT i%
-
- COLOR 15
- LOCATE 54, 3
- PRINT "Spielende"
- LOCATE 54, 18
- PRINT "Neues Spiel"
- MouseShow
- '********************* Auswertung der gewählten Taste *********************
-
- DO
- MouseAction xm1%, ym1%
- 'Abfrage ob innerhalb Spielendetastenfeld
- flag% = 1
- IF xm1% < xs% OR xm1% > xs% + dxs% + lxs% THEN
- flag% = 0
- ELSE
- IF ym1% < ys% OR ym1% > ys% + lys% THEN
- flag% = 0
- END IF
- END IF
- LOOP UNTIL flag% <> 0
-
- 'Übergabeparameter vorbereiten
- sfeld.x = xs%
- sfeld.y = ys%
- sfeld.dx = dxs%
- sfeld.dy = lys%
- sfeld.m = 2
- sfeld.n = 1
-
- FGameNew% = Infeld%(xm1%, ym1%, sfeld)
-
- END FUNCTION
-
- '***************************************************************************
- '* FGetWahl% *
- '* Function zur Ermittlung der symbolischen Feldnummer des gewählten Felds *
- '* Stand: 31.10.94 *
- '***************************************************************************
- '
- 'Ergebnis des Funktionsaufrufs: symbolische Feldnummer des gewählten Felds
- ' bei Falscheingabe 888!
- '
- 'Aufruf durch: Setzen
- '
- 'Ruft auf: Infeld, ZifWahl
- '
- 'Parameters: xm1%, ym1% Mauskoordinaten
- '
- FUNCTION FGetWahl% (xm1%, ym1%)
-
- 'Überprüfung ob im Roulettefeldbereich
-
- IF xm1% < x1% - 3 * dx1% OR xm1% > x1% + 6 * dx1% THEN
- FGetWahl% = 888
- EXIT FUNCTION
- END IF
- IF ym1% < y1% OR ym1% > y1% + 14 * dy1% THEN
- FGetWahl% = 888
- EXIT FUNCTION
- END IF
- IF ym1% > y1% AND ym1% < y1% + dy1% THEN
- IF xm1% < x1% OR xm1% > x1% + 3 * dx1% THEN
- 'obere Ecken links und rechts von Null
- FGetWahl% = 888
- EXIT FUNCTION
- END IF
- END IF
-
- 'Ermittlung ob unterste Zeile ( Dutzendfelder und Spalten )
-
- IF ym1% > y1% + 13 * dy1% AND ym1% < y1% + 14 * dy1% THEN
- IF xm1% > x1% - 3 * dx1% AND xm1% < x1% + 6 * dx1% THEN
- '******** unterste Zeile der Setzfelder
- dfeld.x = x1% - 3 * dx1%
- dfeld.y = y1% + 13 * dy1%
- dfeld.dx = dx1%
- dfeld.dy = dy1%
- dfeld.m = 9
- dfeld.n = 1
- FeldNr% = Infeld%(xm1%, ym1%, dfeld)
- SELECT CASE FeldNr%
- CASE 1 TO 3
- FGetWahl% = FeldNr% + 600 'linke Dutzendfelder
- CASE 4 TO 6
- FGetWahl% = FeldNr% + 607 'Spalten (611 bis 613)
- CASE 7 TO 9
- FGetWahl% = 610 - FeldNr% 'rechte Dutzendfelder
- CASE ELSE
- FGetWahl% = 888 'Fehler bei Feldwahl
- END SELECT
- EXIT FUNCTION
- END IF
- END IF
-
- 'Ermittlung ob allg. Feld oder im Ziffernbereich
-
- IF xm1% > x1% - 3 * dx1% AND xm1% < x1% - dx1% / 4 THEN
- '******* linke Spalte der allg. Felder
- IF ym1% > y1% + dy1% AND ym1% < y1% + 13 * dy1% THEN
- rsfeld.x = x1% - 3 * dx1%
- rsfeld.y = y1% + dy1%
- rsfeld.dx = 3 * dx1%
- rsfeld.dy = 4 * dy1%
- rsfeld.m = 1
- rsfeld.n = 3
- FeldNr% = Infeld%(xm1%, ym1%, rsfeld)
- FGetWahl% = FeldNr% + 700
- EXIT FUNCTION
- END IF
- END IF
-
- IF xm1% > x1% + 3 * dx1% + dx1% / 4 AND xm1% < x1% + 6 * dx1% THEN
- '******* rechte Spalte der allg. Felder
- IF ym1% > y1% + dy1% AND ym1% < y1% + 13 * dy1% THEN
- rsfeld.x = x1% + 3 * dx1%
- rsfeld.y = y1% + dy1%
- rsfeld.dx = 3 * dx1%
- rsfeld.dy = 4 * dy1%
- rsfeld.m = 1
- rsfeld.n = 3
- FeldNr% = Infeld%(xm1%, ym1%, rsfeld)
- FGetWahl% = FeldNr% + 710
- EXIT FUNCTION
- END IF
- END IF
-
- 'Abfrage ob Null
-
- IF ym1% > y1% AND ym1% < y1% + dy1% - dy1% / 4 THEN
- IF xm1% > x1% AND xm1% < x1% + 3 * dx1% THEN
- '********** Null wurde gewählt
- FGetWahl% = 0
- EXIT FUNCTION
- END IF
- END IF
-
- 'Übergabeparameter für Ziffernbereich vorbereiten
-
- zfeld.x = x1% - dx1% / 4
- zfeld.y = y1% + dy1% - dy1% / 4
- zfeld.dx = dx1% / 2
- zfeld.dy = dy1% / 2
- zfeld.m = 7
- zfeld.n = 24
-
- FGetWahl% = Infeld%(xm1%, ym1%, zfeld)
-
- END FUNCTION
-
- '***************************************************************************
- '* FTaste% *
- '* Function zur Ermittlung der gewählten Funktionstaste *
- '* Stand: 23.06.94 *
- '***************************************************************************
- '
- 'Ergebnis des Funktionsaufrufs: Nummer der gewählten Taste
- ' 1 = LÖSCHEN
- ' 2 = O.K.
- ' 3 = FERTIG
- ' 0 = keine Funktionstaste gedrückt
- '
- '
- 'Aufruf durch: Setzen
- '
- 'Ruft auf: Infeld
- '
- 'Parameters: xm1%, ym1% Mauskoordinaten
- '
- 'Variables: xf% x-Koord. der ersten Funktionstaste
- ' yf% y-Koord. der ersten Funktionstaste
- ' dxf% Abstand der Funktionstasten in x
- ' lxf% Funktionstastenlänge
- ' lyf% Funktionstastenbreite
- ' m% Anzahl der Funktionstasten
- '
- FUNCTION FTaste% (xm1%, ym1%)
-
- m% = 3
- IF xm1% < xf% OR xm1% > xf% + m% * dxf% THEN
- FTaste% = 0
- EXIT FUNCTION
- ELSE
- IF ym1% < yf% OR ym1% > yf% + lyf% THEN
- FTaste% = 0
- EXIT FUNCTION
- END IF
- END IF
-
- 'Übergabeparameter vorbereiten
-
- ffeld.x = xf%
- ffeld.y = yf%
- ffeld.dx = dxf%
- ffeld.dy = lyf%
- ffeld.m = 3
- ffeld.n = 1
-
- FTaste% = Infeld%(xm1%, ym1%, ffeld)
-
- END FUNCTION
-
- '***************************************************************************
- '* FWahl$ *
- '* Function zur Ermittlung des Textes des Setzfeldes *
- '* Stand: 31.10.94 *
- '***************************************************************************
- '
- 'Ermittelt aus der symbolischen Feldnummer den Text für die Anzeige
- 'und gibt diesen als String zurück
- '
- 'Aufruf durch: Setzen
- '
- 'Ruft auf: -
- '
- 'Parameters: wahl% symbolische Feldnummer
- '
- FUNCTION FWahl$ (wahl%)
-
- SELECT CASE wahl%
- CASE IS > 700
- SELECT CASE wahl%
- CASE 701
- FWahl$ = "PASSE"
- CASE 702
- FWahl$ = "PAIR"
- CASE 703
- FWahl$ = "NOIR"
- CASE 711
- FWahl$ = "MANQUE"
- CASE 712
- FWahl$ = "IMPAIR"
- CASE 713
- FWahl$ = "ROUGE"
- CASE ELSE
- PRINT "Unbekannte Wahl "; wahl%
- END SELECT
- CASE IS > 600
- SELECT CASE wahl%
- CASE 601
- FWahl$ = "1 - 12"
- CASE 602
- FWahl$ = "13 - 24"
- CASE 603
- FWahl$ = "25 - 36"
- CASE 611
- FWahl$ = "1.Spalte"
- CASE 612
- FWahl$ = "2.Spalte"
- CASE 613
- FWahl$ = "3.Spalte"
- CASE ELSE
- PRINT "Unbekannte Wahl "; wahl%
- END SELECT
- CASE IS < 169
- SELECT CASE wahl%
- CASE 0: FWahl$ = "0"
- CASE 1, 7
- FWahl$ = "0, 1, 2, 3"
- CASE 2: FWahl$ = "0, 1"
- CASE 3: FWahl$ = "0, 1, 2"
- CASE 4: FWahl$ = "0, 2"
- CASE 5: FWahl$ = "0, 2, 3"
- CASE 6: FWahl$ = "0, 3"
- CASE 8, 14
- FWahl$ = "1, 2, 3"
- CASE 9: FWahl$ = "1"
- CASE 10: FWahl$ = "1, 2"
- CASE 11: FWahl$ = "2"
- CASE 12: FWahl$ = "2, 3"
- CASE 13: FWahl$ = "3"
- CASE 15, 21
- FWahl$ = "1 - 6"
- CASE 16: FWahl$ = "1, 4"
- CASE 17: FWahl$ = "1, 2, 4, 5"
- CASE 18: FWahl$ = "2, 5"
- CASE 19: FWahl$ = "2, 3, 5, 6"
- CASE 20: FWahl$ = "3, 6"
- CASE 22, 28
- FWahl$ = "4, 5, 6"
- CASE 23: FWahl$ = "4"
- CASE 24: FWahl$ = "4, 5"
- CASE 25: FWahl$ = "5"
- CASE 26: FWahl$ = "5, 6"
- CASE 27: FWahl$ = "6"
- CASE 29, 35
- FWahl$ = "4 - 9"
- CASE 30: FWahl$ = "4, 7"
- CASE 31: FWahl$ = "4, 5, 7, 8"
- CASE 32: FWahl$ = "5, 8"
- CASE 33: FWahl$ = "5, 6, 8, 9"
- CASE 34: FWahl$ = "6, 9"
- CASE 36, 42
- FWahl$ = "7, 8, 9"
- CASE 37: FWahl$ = "7"
- CASE 38: FWahl$ = "7, 8"
- CASE 39: FWahl$ = "8"
- CASE 40: FWahl$ = "8, 9"
- CASE 41: FWahl$ = "9"
- CASE 43, 49
- FWahl$ = "7 - 12"
- CASE 44: FWahl$ = "7, 10"
- CASE 45: FWahl$ = "7, 8, 10, 11"
- CASE 46: FWahl$ = "8, 11"
- CASE 47: FWahl$ = "8, 9, 11, 12"
- CASE 48: FWahl$ = "9, 12"
- CASE 50, 56
- FWahl$ = "10, 11, 12"
- CASE 51: FWahl$ = "10"
- CASE 52: FWahl$ = "10, 11"
- CASE 53: FWahl$ = "11"
- CASE 54: FWahl$ = "11, 12"
- CASE 55: FWahl$ = "12"
- CASE 57, 63
- FWahl$ = "10 - 15"
- CASE 58: FWahl$ = "10, 13"
- CASE 59: FWahl$ = "10, 11, 13, 14"
- CASE 60: FWahl$ = "11, 14"
- CASE 61: FWahl$ = "11, 12, 14, 15"
- CASE 62: FWahl$ = "12, 15"
- CASE 64, 70
- FWahl$ = "13, 14, 15"
- CASE 65: FWahl$ = "13"
- CASE 66: FWahl$ = "13, 14"
- CASE 67: FWahl$ = "14"
- CASE 68: FWahl$ = "14, 15"
- CASE 69: FWahl$ = "15"
- CASE 71, 77
- FWahl$ = "13 - 18"
- CASE 72: FWahl$ = "13, 16"
- CASE 73: FWahl$ = "13, 14, 16, 17"
- CASE 74: FWahl$ = "14, 17"
- CASE 75: FWahl$ = "14, 15, 17, 18"
- CASE 76: FWahl$ = "15, 18"
- CASE 78, 84
- FWahl$ = "16, 17, 18"
- CASE 79: FWahl$ = "16"
- CASE 80: FWahl$ = "16, 17"
- CASE 81: FWahl$ = "17"
- CASE 82: FWahl$ = "17, 18"
- CASE 83: FWahl$ = "18"
- CASE 85, 91
- FWahl$ = "16 - 21"
- CASE 86: FWahl$ = "16, 19"
- CASE 87: FWahl$ = "16, 17, 19, 20"
- CASE 88: FWahl$ = "17, 20"
- CASE 89: FWahl$ = "17, 18, 20, 21"
- CASE 90: FWahl$ = "18, 21"
- CASE 92, 98
- FWahl$ = "19, 20, 21"
- CASE 93: FWahl$ = "19"
- CASE 94: FWahl$ = "19, 20"
- CASE 95: FWahl$ = "20"
- CASE 96: FWahl$ = "20, 21"
- CASE 97: FWahl$ = "21"
- CASE 99, 105
- FWahl$ = "19 - 24"
- CASE 100: FWahl$ = "19, 22"
- CASE 101: FWahl$ = "19, 20, 22, 23"
- CASE 102: FWahl$ = "20, 23"
- CASE 103: FWahl$ = "20, 21, 23, 24"
- CASE 104: FWahl$ = "21, 24"
- CASE 106, 112
- FWahl$ = "22, 23, 24"
- CASE 107: FWahl$ = "22"
- CASE 108: FWahl$ = "22, 23"
- CASE 109: FWahl$ = "23"
- CASE 110: FWahl$ = "23, 24"
- CASE 111: FWahl$ = "24"
- CASE 113, 119
- FWahl$ = "22 - 27"
- CASE 114: FWahl$ = "22, 25"
- CASE 115: FWahl$ = "22, 23, 25, 26"
- CASE 116: FWahl$ = "23, 26"
- CASE 117: FWahl$ = "23, 24, 26, 27"
- CASE 118: FWahl$ = "24, 27"
- CASE 120, 126
- FWahl$ = "25, 26, 27"
- CASE 121: FWahl$ = "25"
- CASE 122: FWahl$ = "25, 26"
- CASE 123: FWahl$ = "26"
- CASE 124: FWahl$ = "26, 27"
- CASE 125: FWahl$ = "27"
- CASE 127, 133
- FWahl$ = "25 - 30"
- CASE 128: FWahl$ = "25, 28"
- CASE 129: FWahl$ = "25, 26, 28, 29"
- CASE 130: FWahl$ = "26, 29"
- CASE 131: FWahl$ = "26, 27, 29, 30"
- CASE 132: FWahl$ = "27, 30"
- CASE 134, 140
- FWahl$ = "28, 29, 30"
- CASE 135: FWahl$ = "28"
- CASE 136: FWahl$ = "28, 29"
- CASE 137: FWahl$ = "29"
- CASE 138: FWahl$ = "29, 30"
- CASE 139: FWahl$ = "30"
- CASE 141, 147
- FWahl$ = "28 - 33"
- CASE 142: FWahl$ = "28, 31"
- CASE 143: FWahl$ = "28, 29, 31, 32"
- CASE 144: FWahl$ = "29, 32"
- CASE 145: FWahl$ = "29, 30, 32, 33"
- CASE 146: FWahl$ = "30, 33"
- CASE 148, 154
- FWahl$ = "31, 32, 33"
- CASE 149: FWahl$ = "31"
- CASE 150: FWahl$ = "31, 32"
- CASE 151: FWahl$ = "32"
- CASE 152: FWahl$ = "32, 33"
- CASE 153: FWahl$ = "33"
- CASE 155, 161
- FWahl$ = "31 - 36"
- CASE 156: FWahl$ = "31, 34"
- CASE 157: FWahl$ = "31, 32, 34, 35"
- CASE 158: FWahl$ = "32, 35"
- CASE 159: FWahl$ = "32, 33, 35, 36"
- CASE 160: FWahl$ = "33, 36"
- CASE 162, 168
- FWahl$ = "34, 35, 36"
- CASE 163: FWahl$ = "34"
- CASE 164: FWahl$ = "34, 35"
- CASE 165: FWahl$ = "35"
- CASE 166: FWahl$ = "35, 36"
- CASE 167: FWahl$ = "36"
- END SELECT
- CASE ELSE
- LOCATE 16, 1
- PRINT "Unbekannte Wahl! FeldNr = "; FeldNr%
- EXIT FUNCTION
- END SELECT
- END FUNCTION
-
- '***************************************************************************
- '* Infeld% *
- '* Function zur Zuordnung der Mauskoordinaten zu einer Feldnummer *
- '* Stand: 20.06.94 *
- '***************************************************************************
- '
- 'Ergebnis des Funktionsaufrufs: Feldnummer des gewählten Felds
- '
- 'Aufruf durch: FEinsatz, FGameNew, FGetWahl, FTaste
- '
- 'Ruft auf: -
- '
- 'Parameters: xk% x-Wert der Mausposition
- ' yk% y-Wert der Mausposition
- ' af Variable vom Typ Feld mit der Beschreibung der Lage
- ' der Felder, der Abstände und der Anzahl
- '
- '
- FUNCTION Infeld% (xk%, yk%, af AS Feld)
-
- FOR j% = 1 TO af.n
- IF yk% > af.y + (j% - 1) * af.dy AND yk% < af.y + j% * af.dy THEN
- FOR i% = 1 TO af.m
- IF xk% > af.x + (i% - 1) * af.dx AND xk% < af.x + i% * af.dx THEN
- Infeld% = i% + (j% - 1) * af.m
- EXIT FUNCTION
- END IF
- NEXT i%
- END IF
- NEXT j%
-
- END FUNCTION
-
- '***************************************************************************
- '* MouseAction *
- '* Subprogramm zur Ermittlung der Mauskoordinaten bei linker Taste betätigt*
- '* Stand: 09.07.94 *
- '***************************************************************************
- '
- 'Ermittelt Mauskoordinaten bei linker Maustaste betätigt und gibt
- 'Koordinaten am Bildschirm aus
- '
- 'Aufruf durch: FGameNew, Setzen
- '
- 'Ruft auf: MousePressLeft
- '
- 'Parameters: xm1%, ym1% Rückgabeparameter, Mauskoordinaten
- '
- '
- SUB MouseAction (xm1%, ym1%)
- DO
- MousePressLeft leftcount%, xm1%, ym1%
- IF leftcount% <> 0 THEN
- curx% = POS(0): cury% = CSRLIN
- LOCATE 57, 1
- PRINT "x-Pos. = "; xm1%
- PRINT "y-Pos. = "; ym1%
- LOCATE cury%, curx%
- END IF
- LOOP UNTIL leftcount% <> 0
- END SUB
-
- ' ************************************************
- ' ** Name: MouseHide **
- ' ** Type: Subprogram **
- ' ** Module: MOUSSUBS.BAS **
- ' ** Language: Microsoft QuickBASIC 4.00 **
- ' ************************************************
- '
- ' Hides the mouse cursor.
- '
- ' EXAMPLE OF USE: MouseHide
- '
- ' Aufruf durch: ROULET.BAS, FehlMeld, FGameNew
- '
- ' Ruft auf: Mouse (QLB)
- '
- ' PARAMETERS: (none)
- ' VARIABLES: (none)
- ' MODULE LEVEL
- ' DECLARATIONS: DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
- ' DECLARE SUB MouseHide ()
- '
- SUB MouseHide STATIC
- Mouse 2, 0, 0, 0
- END SUB
-
- ' ************************************************
- ' ** Name: MouseInches **
- ' ** Type: Subprogram **
- ' ** Module: MOUSSUBS.BAS **
- ' ** Language: Microsoft QuickBASIC 4.00 **
- ' ************************************************
- '
- ' Sets mouse motion ratio in inches per screen.
- '
- ' EXAMPLE OF USE: MouseInches horizontal%, vertical%
- '
- ' Aufruf durch: -
- '
- ' Ruft auf: Mouse (QLB)
- '
- ' PARAMETERS: horizontal% Inches of horizontal mouse motion per
- ' screen width
- ' vertical% Inches of vertical% mouse motion per
- ' screen height
- ' VARIABLES: h% Calculated value to pass to mouse driver
- ' v% Calculated value to pass to mouse driver
- ' MODULE LEVEL
- ' DECLARATIONS: DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
- ' DECLARE SUB MouseInches (horizontal%, vertical%)
- '
- SUB MouseInches (horizontal%, vertical%) STATIC
- IF horizontal% > 100 THEN
- horizontal% = 100
- END IF
- IF vertical% > 100 THEN
- vertical% = 100
- END IF
- h% = horizontal% * 5 \ 2
- v% = vertical% * 8
- Mouse 15, 0, h%, v%
- END SUB
-
- ' ************************************************
- ' ** Name: MouseInstall **
- ' ** Type: Subprogram **
- ' ** Module: MOUSSUBS.BAS **
- ' ** Language: Microsoft QuickBASIC 4.00 **
- ' ************************************************
- '
- ' Determines whether mouse is available and resets all mouse parameters.
- '
- ' EXAMPLE OF USE: MouseInstall mflag%
- '
- ' Aufruf durch: ROULET.BAS
- '
- ' Ruft auf: Mouse (QLB)
- '
- ' PARAMETERS: mflag% Returned indication of mouse availability
- ' VARIABLES: (none)
- ' MODULE LEVEL
- ' DECLARATIONS: DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
- ' DECLARE SUB MouseInstall (mflag%)
- '
- SUB MouseInstall (mflag%) STATIC
- mflag% = 0
- Mouse mflag%, 0, 0, 0
- END SUB
-
- ' ************************************************
- ' ** Name: MousePressLeft **
- ' ** Type: Subprogram **
- ' ** Module: MOUSSUBS.BAS **
- ' ** Language: Microsoft QuickBASIC 4.00 **
- ' ************************************************
- '
- ' Returns the mouse state at last press of left button.
- '
- ' EXAMPLE OF USE: MousePressLeft leftCount%, xMouse%, yMouse%
- '
- ' Aufruf durch: MouseAction
- '
- ' Ruft auf: Mouse (QLB)
- '
- ' PARAMETERS: leftCount% Number of times the left button has been
- ' pressed since the last call to this
- ' subprogram
- ' xMouse% X location of the mouse at the last press
- ' of the left button
- ' yMouse% Y location of the mouse at the last press
- ' of the left button
- ' VARIABLES: m1% Parameter for call to mouse driver
- ' MODULE LEVEL
- ' DECLARATIONS: DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
- ' DECLARE SUB MousePressLeft (leftCount%, xMouse%, yMouse%)
- '
- SUB MousePressLeft (leftcount%, xMouse%, yMouse%) STATIC
- m1% = 5
- leftcount% = 0
- Mouse m1%, leftcount%, xMouse%, yMouse%
- END SUB
-
- ' ************************************************
- ' ** Name: MousePut **
- ' ** Type: Subprogram **
- ' ** Module: MOUSSUBS.BAS **
- ' ** Language: Microsoft QuickBASIC 4.00 **
- ' ************************************************
- '
- ' Sets the mouse position.
- '
- ' EXAMPLE OF USE: MousePut xMouse%, yMouse%
- '
- ' Aufruf durch: -
- '
- ' Ruft auf: Mouse (QLB)
- '
- ' PARAMETERS: xMouse% Horizontal location to place cursor
- ' yMouse% Vertical location to place cursor
- ' VARIABLES: (none)
- ' MODULE LEVEL
- ' DECLARATIONS: DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
- ' DECLARE SUB MousePut (xMouse%, yMouse%)
- '
- SUB MousePut (xMouse%, yMouse%) STATIC
- Mouse 4, 0, xMouse%, yMouse%
- END SUB
-
- ' ************************************************
- ' ** Name: MouseReleaseLeft **
- ' ** Type: Subprogram **
- ' ** Module: MOUSSUBS.BAS **
- ' ** Language: Microsoft QuickBASIC 4.00 **
- ' ************************************************
- '
- ' Returns the mouse state at last release of left button.
- '
- ' EXAMPLE OF USE: MouseReleaseLeft leftCount%, xMouse%, yMouse%
- '
- ' Aufruf durch: -
- '
- ' Ruft auf: Mouse (QLB)
- '
- ' PARAMETERS: leftCount% Number of times the left button has been
- ' released since the last call to this
- ' subprogram
- ' xMouse% X location of the mouse at the last
- ' release of the left button
- ' yMouse% Y location of the mouse at the last
- ' release of the left button
- ' VARIABLES: m1% Parameter for call to mouse driver
- ' MODULE LEVEL
- ' DECLARATIONS: DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
- ' DECLARE SUB MouseReleaseLeft (leftCount%, xMouse%,
- ' yMouse%)
- '
- SUB MouseReleaseLeft (leftcount%, xMouse%, yMouse%) STATIC
- m1% = 6
- leftcount% = 0
- Mouse m1%, leftcount%, xMouse%, yMouse%
- END SUB
-
- ' ************************************************
- ' ** Name: MouseShow **
- ' ** Type: Subprogram **
- ' ** Module: MOUSSUBS.BAS **
- ' ** Language: Microsoft QuickBASIC 4.00 **
- ' ************************************************
- '
- ' Shows the mouse cursor.
- '
- ' EXAMPLE OF USE: MouseShow
- '
- ' Aufruf durch: ROULET.BAS, FehlMeld, FGameNew, Setzen
- '
- ' Ruft auf: Mouse (QLB)
- '
- ' PARAMETERS: (none)
- ' VARIABLES: (none)
- ' MODULE LEVEL
- ' DECLARATIONS: DECLARE SUB Mouse (m1%, m2%, m3%, m4%)
- ' DECLARE SUB MouseShow ()
- '
- SUB MouseShow STATIC
- Mouse 1, 0, 0, 0
- END SUB
-
- '***************************************************************************
- '* Setzen *
- '* Subprogramm zur Abfrage der Einsätze Chip + Nummer *
- '* Stand: 18.09.94 *
- '***************************************************************************
- '
- 'Ermittelt die Spieleinsätze
- '
- 'Aufruf durch: ROULET.BAS
- '
- 'Ruft auf: EinsEintr, FGetWahl, FehlMeld, FEinsatz, FWahl,
- ' FTaste, MouseAction, MouseShow
- '
- '
- ' Parameters: spieler$ String mit Spielernamen
- ' spnr% Spielernummer
- '
- SUB Setzen (spieler$, spnr%)
-
- COLOR 14
- PRINT
- PRINT "Spieleinsatz für "; spieler$
- PRINT
-
- 'Aufruf des Mauscursors
-
- MouseShow
-
- FOR k% = 1 TO 3
- zeile% = CSRLIN: spalte% = POS(0)
-
- '************** Ermittlung des gewählten Chips
- beginn:
- xb% = 32
- yb% = 240
- LINE (xb%, yb%)-(xb% + 100, yb% + 36), 15, B
- bzeile% = 33: bspalte% = 6
- LOCATE bzeile%, bspalte%
- COLOR 14
- PRINT "Chip wählen"
- MouseAction xm1%, ym1%
-
- '****************** Funktionstasten abfragen
-
- Taste% = FTaste%(xm1%, ym1%) 'Funktionsaufruf zur Ermittlung der gew. Taste
-
- IF Taste% = 3 THEN 'fertig
- LOCATE bzeile% - 2, bspalte% - 2
- FOR i% = 1 TO 5
- PRINT SPACE$(20) 'Löschen der Anweisungsbox
- NEXT i%
- LOCATE zeile%, spalte%
- EXIT FOR
- END IF
-
- IF Taste% = 1 AND k% > 1 THEN 'löschen des letzten Eintrages
- zeile% = zeile% - 2
- LOCATE zeile%, spalte%
- PRINT SPACE$(30)
- zeile% = CSRLIN - 1
- LOCATE zeile%, spalte%
- k% = k% - 1
- IF spnr% = 1 THEN
- IF k% = 1 THEN
- speins(1, 1).akt = 0
- ELSEIF k% = 2 THEN
- speins(1, 2).akt = 0
- ELSE ' k% = 3
- speins(1, 3).akt = 0
- END IF
- ELSEIF spnr% = 2 THEN
- IF k% = 1 THEN
- speins(2, 1).akt = 0
- ELSEIF k% = 2 THEN
- speins(2, 2).akt = 0
- ELSE ' k% = 3
- speins(2, 3).akt = 0
- END IF
- ELSE
- PRINT "Falsche Spielernummer!"
- END IF
- GOTO beginn
- END IF
-
- einsatz# = FEinsatz#(xm1%, ym1%) 'Funktionsaufruf
- IF einsatz# = 0 THEN
- FehlNr% = 1
- FehlMeld FehlNr%
- GOTO beginn
- END IF
-
- 'Überprüfung auf Kontoüberziehung
-
- IF spnr% = 1 THEN
- sp1# = sp1# - einsatz#
- IF sp1# < 0 THEN
- 'Kontoüberziehung, Einsatz wird nicht angenommen
- sp1# = sp1# + einsatz#
- FehlNr% = 3
- FehlMeld FehlNr%
- GOTO beginn
- END IF
- ELSE
- sp2# = sp2# - einsatz#
- IF sp2# < 0 THEN
- 'Kontoüberziehung, Einsatz wird nicht angenommen
- sp2# = sp2# + einsatz#
- FehlNr% = 3
- FehlMeld FehlNr%
- GOTO beginn
- END IF
- END IF
-
- LOCATE bzeile%, bspalte%
- PRINT "Feld wählen"
-
- '****************** Ermittlung der gewählten Ziffer
-
- MouseAction xm1%, ym1%
- wahl% = FGetWahl%(xm1%, ym1%) 'Funktionsaufruf zur Ermittlung der
- 'symbolischen Feldnummer der
- 'gew. Ziffer oder des gew. Feldes
-
- IF wahl% = 888 THEN 'Falscheingabe
- FehlNr% = 2
- FehlMeld FehlNr%
- GOTO beginn
- END IF
-
- LOCATE 35, 4
- PRINT SPACE$(30)
- LOCATE zeile%, spalte%
- COLOR 14
- PRINT "DM "; einsatz#; " auf "; FWahl$(wahl%)
- PRINT
- zeile% = CSRLIN: spalte% = POS(0)
-
- '****************** Eintragung des Einsatzes
-
- EinsEintr spnr%, k%, einsatz#, wahl%
-
- cureins# = cureins# + einsatz#
- NEXT k%
- LOCATE bzeile% - 2, bspalte% - 2
- FOR i% = 1 TO 5
- PRINT SPACE$(20) 'Löschen der Anweisungsbox
- NEXT i%
- LOCATE zeile%, spalte%
- END SUB
-
- '***************************************************************************
- '* Spielfeld *
- '* Subprogramm zum Aufbau des Roulettespielfelds *
- '* Stand: 03.07.94 *
- '***************************************************************************
- '
- 'Aufruf durch: ROULET.BAS
- '
- 'Ruft auf: -
- '
- ' Variables: x1% x-Koord. linke, obere Ecke des Setzfeldes bei Null
- ' y1% y-Koord. wie oben
- ' dx1% Spaltenabstand des Setzfeldes
- ' dy1% Zeilenabstand des Setzfeldes
- ' xch% x-Koord. des 5 DM Chips
- ' ych% y-Koord. des 5 DM Chips
- ' dxch% x-Abstand der Chips
- ' dych% y-Abstand der Chips
- ' rch% Radius der Chips
- ' xf% x-Koord. der ersten Funktionstaste
- ' yf% y-Koord. der ersten Funktionstaste
- ' dxf% Abstand der Funktionstasten in x
- ' lxf% Funktionstastenlänge
- ' lyf% Funktionstastenbreite
- '
- '
- SUB Spielfeld STATIC
-
- WIDTH 80, 60
- PALETTE 0, 7680 'grüner Hintergrund
- CLS
-
-
- '****** Zeichnen des Roulette-Setzfeldes
-
- 'Felder 0 - 36
- x1% = 388 'Obere linke Ecke bei Null
- y1% = 12
- dx1% = 40
- dy1% = 32
-
- 'waagrechte Linien
- LINE (x1%, y1%)-(x1% + 3 * dx1%, y1%)
- FOR i% = 1 TO 14
- LINE (x1%, y1% + i% * dy1%)-(x1% + 3 * dx1%, y1% + i% * dy1%)
- NEXT i%
-
- 'senkrechte Linien
- FOR i% = 0 TO 3
- LINE (x1% + i% * dx1%, y1% + dy1%)-(x1% + i% * dx1%, y1% + 14 * dy1%)
- NEXT i%
-
- 'Senkrechte bei Null
- LINE (x1%, y1%)-(x1%, y1% + dy1%)
- LINE (x1% + 3 * dx1%, y1%)-(x1% + 3 * dx1%, y1% + dy1%)
-
- 'Beschriftung der Nummernfelder
-
- LOCATE 4, 57
- PRINT "0"
- PALETTE 8, 0 'color 8 = schwarz
- n% = 1 'erste Zahl
- FOR j% = 8 TO 52 STEP 4
- FOR i% = 51 TO 61 STEP 5
- LOCATE j%, i%
-
- 'Farbe ermitteln
- IF Farbe$(n%) = "r" THEN
- COLOR 12
- ELSE
- COLOR 8
- END IF
-
- 'zweistellige Zahl rechtsbündig ausgeben
- PRINT RIGHT$(STR$(n%), 2)
-
- n% = n% + 1 'nächste Zahl
- NEXT i%
- NEXT j%
-
- COLOR 15
-
- 'Zeichnen der allgemeinen Setzfelder
- 'links
-
- 'Waagrechte
- FOR i% = 1 TO 13 STEP 4
- LINE (x1% - 3 * dx1%, y1% + i% * dy1%)-(x1%, y1% + i% * dy1%)
- NEXT i%
- LINE (x1% - 3 * dx1%, y1% + 14 * dy1%)-(x1%, y1% + 14 * dy1%)
-
- 'Senkrechte
- LINE (x1% - 3 * dx1%, y1% + dy1%)-(x1% - 3 * dx1%, y1% + 14 * dy1%)
- LINE (x1% - 2 * dx1%, y1% + 13 * dy1%)-(x1% - 2 * dx1%, y1% + 14 * dy1%)
- LINE (x1% - dx1%, y1% + 13 * dy1%)-(x1% - dx1%, y1% + 14 * dy1%)
-
-
- 'rechts
- 'Waagrechte
- FOR i% = 1 TO 13 STEP 4
- LINE (x1% + 3 * dx1%, y1% + i% * dy1%)-(x1% + 6 * dx1%, y1% + i% * dy1%)
- NEXT i%
- LINE (x1% + 3 * dx1%, y1% + 14 * dy1%)-(x1% + 6 * dx1%, y1% + 14 * dy1%)
-
- 'Senkrechte
- LINE (x1% + 6 * dx1%, y1% + dy1%)-(x1% + 6 * dx1%, y1% + 14 * dy1%)
- LINE (x1% + 4 * dx1%, y1% + 13 * dy1%)-(x1% + 4 * dx1%, y1% + 14 * dy1%)
- LINE (x1% + 5 * dx1%, y1% + 13 * dy1%)-(x1% + 5 * dx1%, y1% + 14 * dy1%)
-
- 'schwarze Raute
- LINE (x1% - 2 * dx1%, y1% + 11 * dy1%)-(x1% - 1.5 * dx1%, y1% + 10 * dy1%)
- LINE (x1% - dx1%, y1% + 11 * dy1%)-(x1% - 1.5 * dx1%, y1% + 10 * dy1%)
- LINE (x1% - 2 * dx1%, y1% + 11 * dy1%)-(x1% - 1.5 * dx1%, y1% + 12 * dy1%)
- LINE (x1% - dx1%, y1% + 11 * dy1%)-(x1% - 1.5 * dx1%, y1% + 12 * dy1%)
- PALETTE 8, 0 'Farbattribut 8 = schwarz !!
- PAINT (x1% - 1.5 * dx1%, y1% + 11 * dy1%), 8, 15
-
- 'rote Raute
- LINE (x1% + 4 * dx1%, y1% + 11 * dy1%)-(x1% + 4.5 * dx1%, y1% + 10 * dy1%)
- LINE (x1% + 5 * dx1%, y1% + 11 * dy1%)-(x1% + 4.5 * dx1%, y1% + 10 * dy1%)
- LINE (x1% + 4 * dx1%, y1% + 11 * dy1%)-(x1% + 4.5 * dx1%, y1% + 12 * dy1%)
- LINE (x1% + 5 * dx1%, y1% + 11 * dy1%)-(x1% + 4.5 * dx1%, y1% + 12 * dy1%)
- PAINT (x1% + 4.5 * dx1%, y1% + 11 * dy1%), 4, 15
-
- 'Beschriftung der allgemeinen Setzfelder
-
- LOCATE 14, 40
- PRINT "PASSE"
- LOCATE 30, 40
- PRINT "PAIR"
-
- LOCATE 14, 69
- PRINT "MANQUE"
- LOCATE 30, 69
- PRINT "IMPAIR"
-
-
- 'links
- LOCATE 56, 35
- PRINT "1.D."
- LOCATE 56, 40
- PRINT "2.D."
- LOCATE 56, 45
- PRINT "3.D."
-
- 'rechts
- LOCATE 56, 75
- PRINT "1.D."
- LOCATE 56, 70
- PRINT "2.D."
- LOCATE 56, 65
- PRINT "3.D."
-
- '***************************** Chips zeichnen *****************************
-
- xch% = 26
- ych% = 316 'war 356
- dxch% = 55
- dych% = 55
- rch% = 20
-
- CIRCLE (xch%, ych%), rch%
- PAINT (xch%, ych%), 1, 15
- CIRCLE (xch% + dxch%, ych%), rch%
- PAINT (xch% + dxch%, ych%), 3, 15
- CIRCLE (xch% + 2 * dxch%, ych%), rch%
- PAINT (xch% + 2 * dxch%, ych%), 4, 15
- CIRCLE (xch% + 3 * dxch%, ych%), rch%
- PAINT (xch% + 3 * dxch%, ych%), 5, 15
- CIRCLE (xch%, ych% + dych%), rch%
- PAINT (xch%, ych% + dych%), 9, 15
- CIRCLE (xch% + dxch%, ych% + dych%), rch%
- PAINT (xch% + dxch%, ych% + dych%), 10, 15
- CIRCLE (xch% + 2 * dxch%, ych% + dych%), rch%
- PAINT (xch% + 2 * dxch%, ych% + dych%), 11, 15
- CIRCLE (xch% + 3 * dxch%, ych% + dych%), rch%
- PAINT (xch% + 3 * dxch%, ych% + dych%), 12, 15
-
- 'Chips beschriften
-
- LOCATE 40, 4
- PRINT "5"
- LOCATE 40, 10
- PRINT "10"
- LOCATE 40, 17
- PRINT "20"
- LOCATE 40, 24
- PRINT "50"
- LOCATE 47, 3
- PRINT "100"
- LOCATE 47, 10
- PRINT "200"
- LOCATE 47, 17
- PRINT "500"
- LOCATE 47, 23
- PRINT "1000"
-
- '********************** Funktionstasten zeichnen ***************************
-
- xf% = 6
- yf% = 412
- dxf% = 78
- lxf% = 64
- lyf% = 30
- PALETTE 7, 2555959
- 'COLOR 9
- FOR i% = 0 TO 2
- LINE (xf% + i% * dxf%, yf%)-(xf% + lxf% + i% * dxf%, yf% + lyf%), 15, B
- PAINT (xf% + lxf% / 2 + i% * dxf%, yf% + lyf% / 2), 7, 15
- NEXT i%
-
- COLOR 15
- LOCATE 54, 2
- PRINT "löschen"
- LOCATE 54, 14
- PRINT "O.K."
- LOCATE 54, 22
- PRINT "fertig"
-
- END SUB
-
-